home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / T U R B O Language / Turbo Pascal V7.0 / INTRFACE.ZIP / GRAPH.INT < prev    next >
Text File  |  1992-10-30  |  12KB  |  341 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 7.0                        }
  5. {       Graph Interface Unit                            }
  6. {                                                       }
  7. {       Copyright (C) 1987,92 Borland International     }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Graph;
  12.  
  13. interface
  14.  
  15. const
  16.   { GraphResult error return codes: }
  17.   grOk               =   0;
  18.   grNoInitGraph      =  -1;
  19.   grNotDetected      =  -2;
  20.   grFileNotFound     =  -3;
  21.   grInvalidDriver    =  -4;
  22.   grNoLoadMem        =  -5;
  23.   grNoScanMem        =  -6;
  24.   grNoFloodMem       =  -7;
  25.   grFontNotFound     =  -8;
  26.   grNoFontMem        =  -9;
  27.   grInvalidMode      = -10;
  28.   grError            = -11;   { generic error }
  29.   grIOerror          = -12;
  30.   grInvalidFont      = -13;
  31.   grInvalidFontNum   = -14;
  32.   grInvalidVersion   = -18;
  33.  
  34.   { define graphics drivers }
  35.   CurrentDriver = -128; { passed to GetModeRange }
  36.   Detect        = 0;    { requests autodetection }
  37.   CGA           = 1;
  38.   MCGA          = 2;
  39.   EGA           = 3;
  40.   EGA64         = 4;
  41.   EGAMono       = 5;
  42.   IBM8514       = 6;
  43.   HercMono      = 7;
  44.   ATT400        = 8;
  45.   VGA           = 9;
  46.   PC3270        = 10;
  47.  
  48.   { graphics modes for each driver }
  49.   CGAC0      = 0;  { 320x200 palette 0: LightGreen, LightRed, Yellow; 1 page }
  50.   CGAC1      = 1;  { 320x200 palette 1: LightCyan, LightMagenta, White; 1 page }
  51.   CGAC2      = 2;  { 320x200 palette 2: Green, Red, Brown; 1 page }
  52.   CGAC3      = 3;  { 320x200 palette 3: Cyan, Magenta, LightGray; 1 page }
  53.   CGAHi      = 4;  { 640x200 1 page }
  54.   MCGAC0     = 0;  { 320x200 palette 0: LightGreen, LightRed, Yellow; 1 page }
  55.   MCGAC1     = 1;  { 320x200 palette 1: LightCyan, LightMagenta, White; 1 page }
  56.   MCGAC2     = 2;  { 320x200 palette 2: Green, Red, Brown; 1 page }
  57.   MCGAC3     = 3;  { 320x200 palette 3: Cyan, Magenta, LightGray; 1 page }
  58.   MCGAMed    = 4;  { 640x200 1 page }
  59.   MCGAHi     = 5;  { 640x480 1 page }
  60.   EGALo      = 0;  { 640x200 16 color 4 page }
  61.   EGAHi      = 1;  { 640x350 16 color 2 page }
  62.   EGA64Lo    = 0;  { 640x200 16 color 1 page }
  63.   EGA64Hi    = 1;  { 640x350 4 color  1 page }
  64.   EGAMonoHi  = 3;  { 640x350 64K on card, 1 page; 256K on card, 2 page }
  65.   HercMonoHi = 0;  { 720x348 2 page }
  66.   ATT400C0   = 0;  { 320x200 palette 0: LightGreen, LightRed, Yellow; 1 page }
  67.   ATT400C1   = 1;  { 320x200 palette 1: LightCyan, LightMagenta, White; 1 page }
  68.   ATT400C2   = 2;  { 320x200 palette 2: Green, Red, Brown; 1 page }
  69.   ATT400C3   = 3;  { 320x200 palette 3: Cyan, Magenta, LightGray; 1 page }
  70.   ATT400Med  = 4;  { 640x200 1 page }
  71.   ATT400Hi   = 5;  { 640x400 1 page }
  72.   VGALo      = 0;  { 640x200 16 color 4 page }
  73.   VGAMed     = 1;  { 640x350 16 color 2 page }
  74.   VGAHi      = 2;  { 640x480 16 color 1 page }
  75.   PC3270Hi   = 0;  { 720x350 1 page }
  76.   IBM8514LO  = 0;  { 640x480 256 colors }
  77.   IBM8514HI  = 1;  { 1024x768 256 colors }
  78.  
  79.   { Colors for SetPalette and SetAllPalette: }
  80.   Black        = 0;
  81.   Blue         = 1;
  82.   Green        = 2;
  83.   Cyan         = 3;
  84.   Red          = 4;
  85.   Magenta      = 5;
  86.   Brown        = 6;
  87.   LightGray    = 7;
  88.   DarkGray     = 8;
  89.   LightBlue    = 9;
  90.   LightGreen   = 10;
  91.   LightCyan    = 11;
  92.   LightRed     = 12;
  93.   LightMagenta = 13;
  94.   Yellow       = 14;
  95.   White        = 15;
  96.  
  97.   { colors for 8514 to set standard EGA colors w/o knowing their values }
  98.   EGABlack             = 0;       { dark colors }
  99.   EGABlue              = 1;
  100.   EGAGreen             = 2;
  101.   EGACyan              = 3;
  102.   EGARed               = 4;
  103.   EGAMagenta           = 5;
  104.   EGABrown             = 20;
  105.   EGALightgray         = 7;
  106.   EGADarkgray          = 56;      { light colors }
  107.   EGALightblue         = 57;
  108.   EGALightgreen        = 58;
  109.   EGALightcyan         = 59;
  110.   EGALightred          = 60;
  111.   EGALightmagenta      = 61;
  112.   EGAYellow            = 62;
  113.   EGAWhite             = 63;
  114.  
  115.   { Line styles and widths for Get/SetLineStyle: }
  116.   SolidLn    = 0;
  117.   DottedLn   = 1;
  118.   CenterLn   = 2;
  119.   DashedLn   = 3;
  120.   UserBitLn  = 4;       { User-defined line style }
  121.  
  122.   NormWidth  = 1;
  123.   ThickWidth = 3;
  124.  
  125.   { Set/GetTextStyle constants: }
  126.   DefaultFont   = 0;    { 8x8 bit mapped font }
  127.   TriplexFont   = 1;    { "Stroked" fonts }
  128.   SmallFont     = 2;
  129.   SansSerifFont = 3;
  130.   GothicFont    = 4;
  131.  
  132.   HorizDir   = 0;       { left to right }
  133.   VertDir    = 1;       { bottom to top }
  134.  
  135.   UserCharSize = 0;     { user-defined char size }
  136.  
  137.   { Clipping constants: }
  138.   ClipOn  = true;
  139.   ClipOff = false;
  140.  
  141.   { Bar3D constants: }
  142.   TopOn  = true;
  143.   TopOff = false;
  144.  
  145.   { Fill patterns for Get/SetFillStyle: }
  146.   EmptyFill       = 0;  { fills area in background color }
  147.   SolidFill       = 1;  { fills area in solid fill color }
  148.   LineFill        = 2;  { --- fill }
  149.   LtSlashFill     = 3;  { /// fill }
  150.   SlashFill       = 4;  { /// fill with thick lines }
  151.   BkSlashFill     = 5;  { \\\ fill with thick lines }
  152.   LtBkSlashFill   = 6;  { \\\ fill }
  153.   HatchFill       = 7;  { light hatch fill }
  154.   XHatchFill      = 8;  { heavy cross hatch fill }
  155.   InterleaveFill  = 9;  { interleaving line fill }
  156.   WideDotFill     = 10; { Widely spaced dot fill }
  157.   CloseDotFill    = 11; { Closely spaced dot fill }
  158.   UserFill        = 12; { user defined fill }
  159.  
  160.   { BitBlt operators for PutImage: }
  161.   NormalPut     = 0;    { MOV }       { left for 1.0 compatibility }
  162.   CopyPut       = 0;    { MOV }
  163.   XORPut        = 1;    { XOR }
  164.   OrPut         = 2;    { OR  }
  165.   AndPut        = 3;    { AND }
  166.   NotPut        = 4;    { NOT }
  167.  
  168.   { Horizontal and vertical justification for SetTextJustify: }
  169.   LeftText   = 0;
  170.   CenterText = 1;
  171.   RightText  = 2;
  172.  
  173.   BottomText = 0;
  174. { CenterText = 1; already defined above }
  175.   TopText    = 2;
  176.  
  177.  
  178. const
  179.   MaxColors = 15;
  180. type
  181.   PaletteType = record
  182.       Size   : byte;
  183.       Colors : array[0..MaxColors] of shortint;
  184.     end;
  185.  
  186.   LineSettingsType = record
  187.       LineStyle : word;
  188.       Pattern   : word;
  189.       Thickness : word;
  190.     end;
  191.  
  192.   TextSettingsType = record
  193.       Font      : word;
  194.       Direction : word;
  195.       CharSize  : word;
  196.       Horiz     : word;
  197.       Vert      : word;
  198.     end;
  199.  
  200.   FillSettingsType = record               { Pre-defined fill style }
  201.       Pattern : word;
  202.       Color   : word;
  203.     end;
  204.  
  205.   FillPatternType = array[1..8] of byte;  { User defined fill style }
  206.  
  207.   PointType = record
  208.       X, Y : integer;
  209.     end;
  210.  
  211.   ViewPortType = record
  212.       x1, y1, x2, y2 : integer;
  213.       Clip           : boolean;
  214.     end;
  215.  
  216.   ArcCoordsType = record
  217.       X, Y           : integer;
  218.       Xstart, Ystart : integer;
  219.       Xend, Yend     : integer;
  220.     end;
  221.  
  222.  
  223. var
  224.   GraphGetMemPtr  : Pointer;   { allows user to steal heap allocation }
  225.   GraphFreeMemPtr : Pointer;   { allows user to steal heap de-allocation }
  226.  
  227. { *** high-level error handling *** }
  228. function GraphErrorMsg(ErrorCode : integer) : String;
  229. function GraphResult : integer;
  230.  
  231. { *** detection, initialization and crt mode routines *** }
  232. procedure DetectGraph(var GraphDriver, GraphMode : integer);
  233. function GetDriverName : string;
  234.  
  235. procedure InitGraph(var GraphDriver : integer;
  236.             var GraphMode   : integer;
  237.             PathToDriver : String);
  238.  
  239. function RegisterBGIfont(Font : pointer) : integer;
  240. function RegisterBGIdriver(Driver : pointer) : integer;
  241. function InstallUserDriver(DriverFileName : string;
  242.                 AutoDetectPtr : pointer) : integer;
  243. function InstallUserFont(FontFileName : string) : integer;
  244. procedure SetGraphBufSize(BufSize : word);
  245. function GetMaxMode : integer;
  246. procedure GetModeRange(GraphDriver : integer; var LoMode, HiMode : integer);
  247. function GetModeName(GraphMode : integer) : string;
  248. procedure SetGraphMode(Mode : integer);
  249. function GetGraphMode : integer;
  250. procedure GraphDefaults;
  251. procedure RestoreCrtMode;
  252. procedure CloseGraph;
  253.  
  254. function  GetX : integer;
  255. function  GetY : integer;
  256. function  GetMaxX : integer;
  257. function  GetMaxY : integer;
  258.  
  259. { *** Screen, viewport, page routines *** }
  260. procedure ClearDevice;
  261. procedure SetViewPort(x1, y1, x2, y2 : integer; Clip : boolean);
  262. procedure GetViewSettings(var ViewPort : ViewPortType);
  263. procedure ClearViewPort;
  264. procedure SetVisualPage(Page : word);
  265. procedure SetActivePage(Page : word);
  266.  
  267. { *** point-oriented routines *** }
  268. procedure PutPixel(X, Y : integer; Pixel : word);
  269. function  GetPixel(X, Y : integer) : word;
  270.  
  271. { *** line-oriented routines *** }
  272. procedure SetWriteMode(WriteMode : integer);
  273. procedure LineTo(X, Y : integer);
  274. procedure LineRel(Dx, Dy : integer);
  275. procedure MoveTo(X, Y : integer);
  276. procedure MoveRel(Dx, Dy : integer);
  277. procedure Line(x1, y1, x2, y2 : integer);
  278. procedure GetLineSettings(var LineInfo : LineSettingsType);
  279. procedure SetLineStyle(LineStyle : word;
  280.                Pattern   : word;
  281.                Thickness : word);
  282.  
  283. { *** polygon, fills and figures *** }
  284. procedure Rectangle(x1, y1, x2, y2 : integer);
  285. procedure Bar(x1, y1, x2, y2 : integer);
  286. procedure Bar3D(x1, y1, x2, y2 : integer; Depth : word; Top : boolean);
  287. procedure DrawPoly(NumPoints : word; var PolyPoints);
  288. procedure FillPoly(NumPoints : word; var PolyPoints);
  289. procedure GetFillSettings(var FillInfo : FillSettingsType);
  290. procedure GetFillPattern(var FillPattern : FillPatternType);
  291. procedure SetFillStyle(Pattern : word; Color : word);
  292. procedure SetFillPattern(Pattern : FillPatternType; Color : word);
  293. procedure FloodFill(X, Y : integer; Border : word);
  294.  
  295. { *** arc, circle, and other curves *** }
  296. procedure Arc(X, Y : integer; StAngle, EndAngle, Radius : word);
  297. procedure GetArcCoords(var ArcCoords : ArcCoordsType);
  298. procedure Circle(X, Y : integer; Radius : word);
  299. procedure Ellipse(X, Y : integer;
  300.           StAngle, EndAngle : word;
  301.           XRadius, YRadius  : word);
  302. procedure FillEllipse(X, Y : integer;
  303.               XRadius, YRadius  : word);
  304. procedure GetAspectRatio(var Xasp, Yasp : word);
  305. procedure SetAspectRatio(Xasp, Yasp : word);
  306. procedure PieSlice(X, Y : integer; StAngle, EndAngle, Radius : word);
  307. procedure Sector(X, Y : Integer;
  308.          StAngle, EndAngle,
  309.          XRadius, YRadius : word);
  310.  
  311.  
  312. { *** color and palette routines *** }
  313. procedure SetBkColor(ColorNum : word);
  314. procedure SetColor(Color : word);
  315. function GetBkColor : word;
  316. function GetColor : word;
  317. procedure SetAllPalette(var Palette);
  318. procedure SetPalette(ColorNum : word; Color : shortint);
  319. procedure GetPalette(var Palette : PaletteType);
  320. function GetPaletteSize : integer;
  321. procedure GetDefaultPalette(var Palette : PaletteType);
  322. function GetMaxColor : word;
  323. procedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue : integer);
  324.  
  325. { *** bit-image routines *** }
  326. function  ImageSize(x1, y1, x2, y2 : integer) : word;
  327. procedure GetImage(x1, y1, x2, y2 : integer; var BitMap);
  328. procedure PutImage(X, Y : integer; var BitMap; BitBlt : word);
  329.  
  330. { *** text routines *** }
  331. procedure GetTextSettings(var TextInfo : TextSettingsType);
  332. procedure OutText(TextString : string);
  333. procedure OutTextXY(X, Y : integer; TextString : string);
  334. procedure SetTextJustify(Horiz, Vert : word);
  335. procedure SetTextStyle(Font, Direction : word; CharSize : word);
  336. procedure SetUserCharSize(MultX, DivX, MultY, DivY : word);
  337. function  TextHeight(TextString : string) : word;
  338. function  TextWidth(TextString : string) : word;
  339.  
  340.  
  341.